package DSexam;

// 修改Main1：
// 寻找最近的Fib数至少需要多少次

import java.util.Scanner;

public class FibNum {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int N = in.nextInt();
            int f1 = 0;
            int f2 = 1;
            // 定义最开始的两个Fib数
            // 寻找时：要么是直接相等，要么是在两个数之间然后寻找最小步数
            int f3 = -1; // 不使用数组存储，也就不用遍历：而是通过修改f1、f2来达到修改f3的目的（此时赋值-1，因为是从0开始的）
            while(f3<N) {
                // 小于N就一直计算f3
                f3 = f1+f2;
                // 判断一下在计算完f3后是否大于等于N
                // 一定要加这个判断：因为如果此时的f3一旦大于等于N，那就是已经在f2 f3之间，直接求距离就行
                // 不加的话就是会更新f1 f2的值，此时后面的计算距离时就是不同的，此时就要修改后面计算距离的代码。

                if(f3>=N) {
                    break; // 不用再继续计算了
                }
                f1 = f2;
                f2 = f3;
            }
            // 来到这儿：说明f3此时>=N，进行判断找min
            // 即：N介于f2 f3之间：分别计算与两个之间的距离（绝对值），取小的
            if(Math.abs(f3-N) < Math.abs(N-f2)) {
                System.out.println(Math.abs(f3-N));
            } else {
                System.out.println(Math.abs(N-f2));
            }

        }
    }
}
